/*
 * Copyright 2011 Philippe Blanc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package me.l1k3.fx.client.engine;

import me.l1k3.fx.client.engine.impl.AnimationSchedulerJSTimer;
import me.l1k3.fx.client.engine.impl.FXEngineJS;
import me.l1k3.fx.client.engine.inter.FXEngine;
import me.l1k3.fx.client.engine.inter.FXEngineCSS3;
import me.l1k3.fx.client.engine.inter.FXEngineConnector;

import com.google.gwt.core.client.GWT;

public final class FXEngineFactory {

    public final static FXEngine getEngine(FXEngineConnector fx) {
        FXEngine engine = GWT.create(FXEngine.class);
        engine.setFX(fx);
        
        return engine;
    }

    public final static FXEngine getCSS3Engine(FXEngineConnector fx) {
        FXEngineCSS3 engine = GWT.create(FXEngineCSS3.class);
        engine.setFX(fx);

        return engine;
    }

    public final static FXEngine getJSEngine(FXEngineConnector fx) {
        FXEngineJS engine = new FXEngineJS();
        engine.setFX(fx);

        return engine;
    }

    public final static FXEngine getJSTimerEngine(FXEngineConnector fx) {
        FXEngineJS engine = new FXEngineJS(AnimationSchedulerJSTimer.get());
        engine.setFX(fx);

        return engine;
    }

    public final static FXEngine getHybrid(FXEngine engine) {

        if (FXHybridEngine.HYBRID.equals(engine.toString())) {
            return engine;
        }

        return new FXHybridEngine(engine);
    }
}
